package business.global.pk.ddz.cardtype.type;

import business.ddz.c2s.cclass.DDZ_define;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * @author zhujianming
 * @date 2020-07-14 17:50
 * 牌型适配器
 */
public class DDZTypeAdapter {
    List<Class> typeList = new ArrayList<>();
    private static class Singleton {
        private final static DDZTypeAdapter instance = new DDZTypeAdapter();
    }

    public static DDZTypeAdapter getInstance() {
        return DDZTypeAdapter.Singleton.instance;
    }

    public DDZTypeAdapter(){
        initAdapter();
    }

    /**
     * 初始化适配器
     */
    public void initAdapter(){
        typeList.add(DDZPlane.class);
        typeList.add(DDZPlaneWithPairs.class);
        typeList.add(DDZPlaneWithA.class);
        typeList.add(DDZFourWithTwoPairs.class);
        typeList.add(DDZFourWithTwo.class);
        typeList.add(DDZFourWithAPairs.class);
        typeList.add(DDZFourWithA.class);
        typeList.add(DDZMultiPairs.class);
        typeList.add(DDZStraight.class);
        typeList.add(DDZThreeZone.class);
        typeList.add(DDZThreeZoneWithPairs.class);
        typeList.add(DDZThreeZoneWithA.class);
        typeList.add(DDZBomb.class);
        typeList.add(DDZRocket.class);
        typeList.add(DDZAPairs.class);
        typeList.add(DDZSingle.class);
    }

    public List<Class> getTypeList() {
        return typeList;
    }

    /**
     * 适配配型
     * @param type 牌型
     * @return 返回相应的牌型
     */
    public int getAdapterType(Class type){
        if(type== DDZPlane.class){
            return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_FEIJI0.value();
        }else if(type== DDZPlaneWithPairs.class){
            return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_FEIJI2.value();
        }else if(type== DDZPlaneWithA.class){
            return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_FEIJI1.value();
        }else if(type== DDZFourWithTwoPairs.class){
            return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_4DAI4.value();
        }else if(type== DDZFourWithTwo.class){
            return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_4DAI2.value();
        }else if(type== DDZFourWithAPairs.class){
            return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_4DAI21.value();
        }else if(type== DDZFourWithA.class){
            return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_4DAI1.value();
        }else if(type== DDZMultiPairs.class){
            return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_LIANDUI.value();
        }else if(type== DDZStraight.class){
            return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_SHUNZI.value();
        }else if(type== DDZThreeZone.class){
            return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_3BUDAI.value();
        }else if(type== DDZThreeZoneWithPairs.class){
            return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_3DAI2.value();
        }else if(type== DDZThreeZoneWithA.class){
            return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_3DAI1.value();
        }else if(type== DDZBomb.class){
            return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_ZHADAN.value();
        }else if(type== DDZRocket.class){
            return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_ZHADAN.value();
        }else if(type== DDZAPairs.class){
            return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_DUIZI.value();
        }else if(type== DDZSingle.class){
            return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_SINGLECARD.value();
        }
        return DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_NOMARL.value();
    }

    /**
     * 反适配配型
     * @param type 牌型
     * @return 返回相应的牌型
     */
    public Class obAdapterType(int type){
        if(type==DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_FEIJI0.value()){
            return DDZPlane.class;
        }else if(type==DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_FEIJI2.value()){
            return DDZPlaneWithPairs.class;
        }else if(type==DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_FEIJI1.value()){
            return DDZPlaneWithA.class;
        }else if(type==DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_4DAI4.value()){
            return DDZFourWithTwoPairs.class;
        }else if(type==DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_4DAI2.value()){
            return DDZFourWithTwo.class;
        }else if(type==DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_4DAI21.value()){
            return DDZFourWithAPairs.class;
        }else if(type==DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_4DAI1.value()){
            return DDZFourWithA.class;
        }else if(type==DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_LIANDUI.value()){
            return DDZMultiPairs.class;
        }else if(type==DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_SHUNZI.value()){
            return DDZStraight.class;
        }else if(type==DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_3BUDAI.value()){
            return DDZThreeZone.class;
        }else if(type==DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_3DAI2.value()){
            return DDZThreeZoneWithPairs.class;
        }else if(type==DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_3DAI1.value()){
            return DDZThreeZoneWithA.class;
        }else if(type==DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_DUIZI.value()){
            return DDZAPairs.class;
        }else if(type==DDZ_define.DDZ_CARD_TYPE.DDZ_CARD_TYPE_SINGLECARD.value()){
            return DDZSingle.class;
        }
        return null;
    }
}
